#ifndef LEXER_H
#define LEXER_H

#include "token.h"

// 词法分析器结构
typedef struct {
    const char* input;    // 输入的SQL文本
    int position;         // 当前字符位置
    int read_position;    // 下一个要读取的字符位置
    char current_char;    // 当前字符
    int line;             // 当前行号
    int column;           // 当前列号
} Lexer;

// 语法分析器与词法分析器交互函数
typedef Token* (*NextTokenFunc)(Lexer*);
#define next_token get_next_token

// 词法分析器API函数
Lexer* create_lexer(const char* input);
void free_lexer(Lexer* lexer);
void skip_whitespace(Lexer* lexer);
Token* get_next_token(Lexer* lexer);
Token* read_identifier(Lexer* lexer);
Token* read_number(Lexer* lexer);
Token* read_string(Lexer* lexer);
TokenType check_keyword(const char* identifier);
void skip_comment(Lexer* lexer);

#endif // LEXER_H